From fd62e281dfe6183cd140cf2cf2bca1a10b574aa7 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 3 Dec 2013 09:57:41 +0100 Subject: [PATCH] common/vsprintf: fix return value when formatting symbolic addresses When the buffer to be formatted to is too small, the function return value is expected to be the number of characters that would be printed (particularly important if that value is then used for allocating a buffer). Hence incrementing the active pointer must always be independent of actually storing a character. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Acked-by: Keir Fraser --- xen/common/vsprintf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xen/common/vsprintf.c b/xen/common/vsprintf.c index 43dc392916..1a6198e4d3 100644 --- a/xen/common/vsprintf.c +++ b/xen/common/vsprintf.c @@ -294,7 +294,8 @@ static char *pointer(char *str, char *end, const char **fmt_ptr, /* Print '+/' */ str = number(str, end, sym_offset, 16, -1, -1, SPECIAL|SIGN|PLUS); if ( str <= end ) - *str++ = '/'; + *str = '/'; + ++str; str = number(str, end, sym_size, 16, -1, -1, SPECIAL); } -- 2.30.2